package com.whfc.fuum.dao;

import com.whfc.entity.dto.Apply.rep.InstitutionRep;
import com.whfc.entity.dto.Apply.req.UserDeptDTO;
import com.whfc.fuum.dto.SysDeptDTO;import com.whfc.fuum.entity.SysDept;import com.whfc.fuum.param.AppDeptListParam;import org.apache.ibatis.annotations.Param;import java.util.List;

public interface SysDeptMapper {
    int deleteByPrimaryKey(Integer id);

    int insert(SysDept record);

    int insertSelective(SysDept record);

    SysDept selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(SysDept record);

    int updateByPrimaryKey(SysDept record);

    int updateByPrimaryKeyWithBLOBs(SysDept record);

    /**
     * 通过人员id查找子孙节点
     *
     * @param userId
     * @return
     */
    List<Integer> selectDescendantDeptIdListByUserId(@Param("userId") Integer userId);

    /**
     * 根据ID查找组织机构名称
     *
     * @param deptId 组织机构ID
     * @return 组织机构名称
     */
    String selectDeptNameById(Integer deptId);

    /**
     * 查询子孙节点
     *
     * @param id
     * @return
     */
    List<Integer> selectDescendantDeptIdList(@Param("id") Integer id);

    /**
     * 查找所有的项目
     *
     * @return
     */
    List<SysDeptDTO> selectAllProject();

    /**
     * 查找当前用户拥有指定权限的组织机构列表
     *
     * @param userId
     * @param ruleId
     * @return
     */
    List<SysDeptDTO> selectDeptListByUserIdAndRuleId(@Param("userId") Integer userId, @Param("ruleId") Integer ruleId);

    /**
     * 查询子节点
     *
     * @param id
     * @return
     */
    List<Integer> selectChildDeptIdList(@Param("id") Integer id);

    /**
     * 根据条件获取组织机构列表
     *
     * @param request
     * @return
     */
    List<SysDeptDTO> selectByParam(AppDeptListParam request);

    /**
     * 根据组织机构名称和父ID查找
     *
     * @param deptName
     * @param pid
     * @return
     */
    SysDept selectByNameAndPid(@Param("deptName") String deptName, @Param("pid") Integer pid);

    /**
     * 查询组织机构路径
     *
     * @param id
     * @return
     */
    String selectDeptPath(@Param("id") Integer id);

    /**
     * 查询子节点
     *
     * @param id
     * @return
     */
    List<SysDept> selectChildDeptList(@Param("id") Integer id);

    /**
     * 逻辑删除
     *
     * @param id
     * @return
     */
    int logicDeleteById(@Param("id") Integer id);

    /**
     * 查询比当前排序大的组织机构列表
     *
     * @param pid
     * @param index
     * @return
     */
    List<SysDept> selectDeptByPidAndMoreIndex(@Param("pid") Integer pid, @Param("index") Integer index);

    /**
     * 修改组织机构索引
     *
     * @param deptId
     * @param index
     */
    void updateIndex(@Param("deptId") Integer deptId, @Param("index") Integer index);

    /**
     * 查询子孙节点
     *
     * @param id
     * @param keyword
     * @return
     */
    List<SysDept> selectDescendantDeptList(@Param("id") Integer id, @Param("keyword") String keyword);

    /**
     * 查询用户关联的项目信息
     *
     * @param userId
     * @return
     */
    List<SysDeptDTO> selectProjectListByUserId(@Param("userId") Integer userId);

    /**
     * 查询组织机构信息
     *
     * @param deptId
     * @return
     */
    SysDeptDTO selectById(@Param("deptId") Integer deptId);

    /**
     * 通过组织机构批量查询
     *
     * @param deptIds
     * @return
     */
    List<SysDeptDTO> selectByIds(@Param("deptIds") List<Integer> deptIds);

    /**
     * 根据父节点ID和GUID 查找组织机构
     *
     * @param pid  父节点ID
     * @param guid guid
     * @return 组织机构
     */
    SysDeptDTO selectByPidAndGuid(@Param("pid") Integer pid, @Param("guid") String guid);

    /**
     * 获取所有组织机构ID
     *
     * @return 组织机构ID
     */
    List<Integer> selectAllDeptId();

    /**
     * 根据GUID查找组织机构
     *
     * @param guid guid
     * @return 组织机构
     */
    SysDeptDTO selectByGuid(@Param("guid") String guid);

    List<InstitutionRep> getUnit(@Param("deptId") Integer deptId);

    List<UserDeptDTO> queryMessage(@Param("deptId")Integer deptId);

    String selectDeptIdById(@Param("id") Integer id);
}